//
//  vdShaderLib.h
//  Void Dead
//
//  Created by Sidney Just on 28.02.10.
//  Copyright © 2009 by Sidney Just
//  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated 
//  documentation files (the "Software"), to deal in the Software without restriction, including without limitation 
//  the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, 
//  and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
//  The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
//  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 
//  INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR 
//  PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE 
//  FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 
//  ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//

#import <Foundation/Foundation.h>

#import "vdShader.h"

typedef enum {
	vdShaderDefault,
	vdShaderFixed
} vdLibShader;

/**
 * This class loads the default engine shaders and can return a pointer to them
 **/
@interface vdShaderLib : NSObject <vdShaderProtocol> {
@private
	vdShader *defaultShader;
	GLint def_positionLoc;
	GLint def_texCoordLoc;
	GLint def_samplerLoc;
	GLint def_matrix;
	GLint def_colorLoc;
	
	vdShader *fixedColor;
	GLint fxd_positionLoc;
	GLint fxd_texCoordLoc;
	GLint fxd_samplerLoc;
	GLint fxd_matrix;
	GLint fxd_colorLoc;
}

/**
 * Returns the shared instance of the class
 @return Pointer to the shared instance
 **/
+ (vdShaderLib *)sharedLib;

/**
 * Returns the given shader
 @param shd The shader you want returned. Possible values are:
 <br>vdShaderDefault = The default engine shader. It uses the texture and color to create the same result like the OpenGL ES 1.1 renderer.
 <br>vdShaderFixed = Like the default shader, but with a fixed color. Only the alpha channel will be loaded from the texture, all other channels will be set to the node color.
 @return Pointer to the shader or NULL if the function fails.
 **/
- (vdShader *)getShader:(vdLibShader)shd;

@end
